#include "../../lv_examples.h"
#if LV_USE_BTN && LV_BUILD_EXAMPLES

/**
 * Style a button from scratch
 */
void lv_example_btn_2(void)
{
    /*接下来的代码将初始化按钮默认状态下的样式。*/
    static lv_style_t style;
    lv_style_init(&style);

    // 设置圆角，圆角半径为__
    lv_style_set_radius(&style, 20);
    // 设置按钮背景的透明度
    lv_style_set_bg_opa(&style, LV_OPA_100);
    // 设置按钮背景的颜色
    lv_style_set_bg_color(&style, lv_palette_main(LV_PALETTE_BLUE));
    // 设置按钮背景的渐变颜色,最后一个参数是使其变暗，和变暗的级别
    lv_style_set_bg_grad_color(&style, lv_palette_darken(LV_PALETTE_BLUE, 3));
    // 设置按钮背景颜色的渐变方向，此处为垂直（从上到下）
    lv_style_set_bg_grad_dir(&style, LV_GRAD_DIR_VER);
    // 设置按钮边框的透明度
    lv_style_set_border_opa(&style, LV_OPA_40);
    // 设置按钮边框的宽度
    lv_style_set_border_width(&style, 2);
    // 设置按钮边框的颜色，此处为灰色
    lv_style_set_border_color(&style, lv_palette_main(LV_PALETTE_GREY));
    // 设置按钮阴影的宽度
    lv_style_set_shadow_width(&style, 10);
    // 设置阴影的颜色，此处为灰色
    lv_style_set_shadow_color(&style, lv_palette_main(LV_PALETTE_GREY));
    // 设置阴影在Y轴的偏移量，此处为__
    lv_style_set_shadow_ofs_y(&style, 10);
    // 设置轮廓的透明度
    lv_style_set_outline_opa(&style, LV_OPA_COVER);
    // 设置轮廓的颜色，此处为蓝色
    lv_style_set_outline_color(&style, lv_palette_main(LV_PALETTE_BLUE));
    // 设置文本的颜色，此处为白色
    lv_style_set_text_color(&style, lv_color_white());
    // 设置内边距，此处为__
    lv_style_set_pad_all(&style, 10);

    /*初始化按钮按下时的样式*/
    static lv_style_t style_pr;
    lv_style_init(&style_pr);

    
    // 设置按下时的轮廓宽度为__，并且将其设置为透明
    lv_style_set_outline_width(&style_pr, 30);
    lv_style_set_outline_opa(&style_pr, LV_OPA_TRANSP);

    // 设置按下状态下按钮在Y轴上的位移
    lv_style_set_translate_y(&style_pr, 5);
    // 设置按下状态下按钮的阴影偏移量
    lv_style_set_shadow_ofs_y(&style_pr, 3);
    // 设置按下状态下按钮的背景颜色
    lv_style_set_bg_color(&style_pr, lv_palette_darken(LV_PALETTE_BLUE, 2));
    // 设置按下状态下按钮的背景渐变颜色
    lv_style_set_bg_grad_color(&style_pr, lv_palette_darken(LV_PALETTE_BLUE, 4));

    /*将为按钮轮廓添加一个过渡动画。*/
    static lv_style_transition_dsc_t trans;
    //定义了一个样式属性数组，指定了过渡动画影响的样式属性。
    static lv_style_prop_t props[] = {LV_STYLE_OUTLINE_WIDTH, LV_STYLE_OUTLINE_OPA, 0};
    //初始化过渡动画的描述符，第二个参数为设置动画路径设置为线性，第三个参数为过渡动画的持续时间，第4个参数为过渡动画的延迟时间，第5个参数为过渡动画的回调函数，此处为NULL。
    lv_style_transition_dsc_init(&trans, props, lv_anim_path_linear, 300, 0, NULL);
    //将过渡动画应用于样式
    lv_style_set_transition(&style_pr, &trans);
    //创建一个按钮
    lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    //移除默认样式
    lv_obj_remove_style_all(btn1);                          /*Remove the style coming from the theme*/
    //为按钮添加样式
    lv_obj_add_style(btn1, &style, 0);
    //为按钮添加按下时的样式
    lv_obj_add_style(btn1, &style_pr, LV_STATE_PRESSED);
    //设置按钮的大小，此处设置为按钮大小为与内容自适应
    lv_obj_set_size(btn1, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
    //将按钮居中
    lv_obj_center(btn1);
    //创建一个标签
    lv_obj_t * label = lv_label_create(btn1);
    //设置标签的文本
    lv_label_set_text(label, "Button");
    //将标签居中
    lv_obj_center(label);
}
#endif
